To aid in understanding the prior art and the problems associated therewith, it is helpful to provide a brief overview of distributed computing environments. The field of distributed computing is a well known field in computer science that deals with distributed systems. A distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal. Three significant characteristics of distributed systems include concurrency of components, lack of a global clock, and independent failure of components. Examples of distributed systems vary from SOA-based systems to massively multiplayer online games to peer-to-peer applications.
Distributed computing also deals with the use of distributed systems to solve computational problems. In distributed computing, a problem is divided into many tasks, each of which is solved by one or more computers, which communicate with each other by message passing.
The computational entities are typically referred to as nodes. A distributed system may have a common goal, such as solving a large computational problem. Alternatively, each computer may have its own user with individual needs, and the purpose of the distributed system is to coordinate the use of shared resources or provide communication services to the users.
Other typical properties of distributed systems include the ability to tolerate failures in individual computers and/or nodes. The structure of the system (i.e. network topology, network latency, number of computers) is not known in advance, the system may consist of different kinds of computers and network links, and the system may change during the execution of a distributed program. In addition, each computer has only a limited, incomplete view of the system and each computer may know only one part of the input.
Distributed computing can make use of various hardware and software architectures. At a lower level, multiple CPUs are interconnected with some sort of network, regardless of whether that network is printed onto a circuit board or made up of loosely coupled devices and cables. At a higher level, processes running on those CPUs are interconnected with some sort of communication system.
Currently, distributed programming typically falls into one of several basic architectures: client-server, three-tier, n-tier, or peer-to-peer; or categories: loose coupling, or tight coupling. Client-server architecture is a hierarchical architecture for distributed computing environments that is generally divided into two layers. One layer within the client-server architecture includes most of the application systems. Application systems include fourth generation languages, computer aided software engineering tools, programming languages and their support tools, and various other commercially available software products. This first layer typically represents the client layer. In client-server architectures smart clients contact the server for data then format and display it to the users. Input at the client is committed back to the server when it represents a permanent change.
A second layer within the client-server architecture includes most of the information service systems. The information service systems are software products such as database management systems and data repositories, specialized data access methods, application servers, and any number of service based monolithic software systems. This second layer represents the server layer.
The client-server architecture also includes a third or middle layer. This third layer typically includes software products designed to provide various infrastructure or interfacing services between other components of the distributed computing environment such as between an application system and an information service system. Such software products are classified as middleware products or systems. A recent term for the hierarchical architecture that utilizes middleware systems is a three-tier system or multi-tier system architecture, where the middleware system consists of software products, applications and services that had previously existed either in the client layer or server layer. Three-tier or multi-tier layers are well known in the art.
Three-tier architectures move the client intelligence to a middle tier so that stateless clients can be used. This simplifies application deployment. For example, the majority of web applications are three-tier. n-tier architectures refer typically to web applications which further forward their requests to other enterprise services. This type of application is the one most responsible for the success of application servers.
In peer-to-peer architectures there are no special machines that provide a service or manage the network resources. Instead all responsibilities are uniformly divided among all machines, known as peers. Peers can serve both as clients and as servers. A peer-to-peer architecture provides any number of peers or service providers while removing some of the constraints imposed by a traditional client-server or other hierarchical architecture. Within a peer-to-peer system architecture, each peer provides one or more services and is able to cooperate and collaborate with fellow peers as services need to be performed concurrently or sequentially.
Another basic aspect of distributed computing architecture is the method of communicating and coordinating work among concurrent processes. Through various message passing protocols, processes may communicate directly with one another, typically in a master/slave relationship. Alternatively, a “database-centric” architecture enables distributed computing without any form of direct inter-process communication, by utilizing a shared database.
One important requirement of application systems operating within a distributed computing environment is scalability. Scalability is the ability of an application system and information service system to address computer environments that range from small (i.e. small numbers of users and computers) to very large computing environments (i.e. large numbers of users and computers) without the significant loss of efficiency. There is a growing demand for a distributed computing system architecture to incorporate such advantageous features as scalability, fault-tolerance, support of legacy applications, and other features such as modeling and simulation capabilities, etc., without significantly contributing to the complexity of the computing environment and without significantly sacrificing performance of the distributed computing system.
An alternative technique aimed at addressing some of the aforementioned problems arising in distributed computing environments is the application of agent technology. The notion of agents and agent technology already exists in the information industry. A standard definition of what an agent entails, however does not exist. A common perception of an agent is a software module or process that accomplishes a task, typically on behalf of a user. For example, conventional agents can filter electronic mail messages for a user based on a specific criterion to reduce the number of junk mail that a user receives.
Disadvantageously, the more an agent looks and functions as a customized software process, the less likely that agents will be able to cooperate with other customized agents operating within the distributed computer environment. Many of the related art agents, both static and dynamic, operating within a distributed computing environment inevitably demonstrate different behaviors and characteristics. Because these different agents often need to cooperate with one another within the distributed computing environment to accomplish various tasks, however, there is a need to facilitate communication between different agents. This is especially true where the agents are associated with different application systems or services. To that end, there is a need to provide a universal or generic architecture for agents which facilitates the cooperative behavior of agents associated with different applications or services. The architecture of an agent based computing system should be independent of the environment in which it exists and independent of the application system or service which it supports. Further, there is a need for a distributed computing architecture that is capable of expanding the computing power that can be expressed by the nodes of a network.